/*
 * @Description: Clerk
 * @Author: rendc
 * @Date: 2024-10-12 15:26:43
 * @LastEditors: rendc
 * @LastEditTime: 2024-10-12 15:42:17
 */
/**
 * Clerk - 店员
 */
public class Clerk {
  // 产品数量
  private int productCount = 0;

  // 联系生产者
  public synchronized void callProductor() {
    if (productCount > 20) {
      // 如果店员管理的产品数量超过20个，店员会叫生产者停止生产
      try {
        this.wait();
        System.out.println("生产者停止生产");
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    } else {
      // 如果店员管理的产品数量低于20个，再通知生产者继续生产
      productCount++;
      System.out.println("生产者：" + Thread.currentThread().getName() + "开始生产第" + productCount + "个产品");
      notifyAll();
    }
  }

  // 联系消费者
  public synchronized void callCustomer() {
    if (productCount > 0) {
      // 通知消费者 开始购买
      productCount--;
      System.out.println("消费者：" + Thread.currentThread().getName() + "开始购买第" + productCount + "个产品");
      notifyAll();
    } else {
      // 没货了
      try {
        this.wait();
        System.out.println("消费者停止购买");
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}